package com.bill.springcloud.hystrix;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * Netflix开源了Hystrix组件，实现了断路器模式，SpringCloud对这一组件进行了整合。
 * 在微服务架构中，一个请求需要调用多个服务是非常常见的.较底层的服务如果出现故障，
 * 会导致连锁故障。当对特定的服务的调用的不可用达到一个阀值（Hystric 是5秒20次） 断路器将会被打开。
 * 断路打开后，可用避免连锁故障，fallback方法可以直接返回一个固定值。
 * @fileName: ServiceHystrixApplication.java
 * @author: bin.li01
 * @date: 2018/2/1 18:32 
 * @version: v1.0.0
 */
@SpringBootApplication
@EnableDiscoveryClient
//开启feign
@EnableFeignClients
//注解开启Hystrix
@EnableHystrix
//注解，开启hystrixDashboard
@EnableHystrixDashboard
public class ServiceHystrixApplication {

	public static void main(String[] args) {
		SpringApplication.run(ServiceHystrixApplication.class, args);
	}

	@Bean
	@LoadBalanced
	public RestTemplate restTemplate(){
		return new RestTemplate();
	}
}
